/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.entidade.humana;

import br.com.deployment.entidade.localidade.Endereco;
import br.com.deployment.utilitario.EstadoCivil;
import br.com.deployment.utilitario.Sexo;
import br.com.deployment.utilitario.TipoPessoa;
import br.com.deployment.validator.CNPJ;
import br.com.deployment.validator.CPF;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;

/**
 *
 * @author elyjr
 */
@Entity
public class Pessoa implements Serializable {

    private static final long serialVersionUID = 1L;
    
    @Id
    @SequenceGenerator(name = "seq_pessoa", sequenceName = "seq_pessoa")
    @GeneratedValue(generator = "seq_pessoa", strategy = GenerationType.SEQUENCE)
    private int id;
    
    @Enumerated(EnumType.STRING)    
    private TipoPessoa tipo;
    
    @Size(min=1, max=500, message="Campo nome deve conter até 500 digitos")
    @Column(length=500)
    private String nome;
    
    @Past(message="Data de Nascimento deve ser anterior a atual")
    @Temporal(TemporalType.DATE)
    private Date dataNasc;
    
    @Temporal(TemporalType.DATE)
    private Date datacad;
    
    @Column(length=20)
    private String rg;
    
    @CPF
    private String cpf;
    
    @CNPJ
    @Column(length=14)
    private String cnpj;
    
    @Enumerated(EnumType.STRING)
    private EstadoCivil estadocivil;
    
    @Column
    private String profissao;
    
    @Enumerated(EnumType.STRING)
    private Sexo sexo;

    @OneToOne(cascade= CascadeType.ALL, fetch= FetchType.EAGER)
    private Endereco endereco;
    
   
    
    public Pessoa() {
    }

    public Date getDataNasc() {
        return dataNasc;
    }

    public void setDataNasc(Date dataNasc) {
        this.dataNasc = dataNasc;
    }

    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Date getDatacad() {
        return datacad;
    }

    public void setDatacad(Date datacad) {
        this.datacad = datacad;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public EstadoCivil getEstadocivil() {
        return estadocivil;
    }

    public void setEstadocivil(EstadoCivil estadocivil) {
        this.estadocivil = estadocivil;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public String getProfissao() {
        return profissao;
    }

    public void setProfissao(String profissao) {
        this.profissao = profissao;
    }

    

    public TipoPessoa getTipo() {
        return tipo;
    }

    public void setTipo(TipoPessoa tipo) {
        this.tipo = tipo;
    }

   
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pessoa other = (Pessoa) obj;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 41 * hash + this.id;
        return hash;
    }

    @Override
    public String toString() {
        return " " + nome + " - " + (cpf == null ? cnpj:cpf) ;
    }


    
   
  
}
